# 在python中使用正则表达式进行数据的过滤与筛选，需要用到re模块进行操作
import re
# findall表示从头进行搜索，将搜索到的结果放在一个列表中
result=re.findall(r"\d+","联通：10010，移动：10086")
print("findall方法执行的结果")
print(result)
# finditer也用于全文搜索，搜索到的结果是一个迭代器
result2=re.finditer(r"\d+","联通：10010，移动：10086")
print("finditer方法执行的结果")
print(result2)
# 迭代器进行解析需要使用for循环进行遍历操作
for item in result2:
    # 若想拿到每个match中匹配的具体数据内容，需要使用group()方法
    print(item.group())
    pass
# search方法只能搜索到一个结果后，进行返回
result3=re.search(r"\d+","联通：10010，移动：10086")
print("search方法的最终执行结果")
print(result3.group())
# match进行文档搜索，从头进行查找，相当于在表达式前面加上了一个^
result4=re.match(r"\d+","10010联通：10010，移动：10086")
print("match方法的最终执行结果")
print(result4.group())
# compile预编译处理，可以将表示式提取出来，方便后面进行复用
obj=re.compile(r"\d+")
result5=obj.finditer("10010联通：10010，移动：10086")
for item in result5:
    print(item.group())
    pass

str="""
<div id='1' class='zjl'>周杰伦</div>
<div id='2' class='ljj'>林俊杰</div>
<div id='3' class='cyl'>蔡依林</div>
<div id='4' class='syz'>孙燕姿</div>
<div id='5' class='xzq'>薛之谦</div>
"""
# re.S让.能够匹配换行符
# 在筛选中若想拿到具体的数值，可以将表达式用（）括起来，在（）中指定参数？P<名字>
# 在下面进行使用时，可以搭配group方法中的参数指定容器的名字可以直接获取改分组中的数据结果
obj2=re.compile(r"<div id='(?P<ID>.*?)' class='(?P<classname>.*?)'>(?P<name>.*?)</div>",re.S)
result6=obj2.finditer(str)
for item in result6:
    print(item.group("ID"))
    print(item.group("classname"))
    print(item.group("name"))
    pass